Gluon API দিয়ে Time Series মডেল তৈরি

Time Series এবং Forecasting - অ্যাপাচি এমএক্সনেট (Apache mxnet) - Machine Learning

334

Time Series ডেটা হল এমন ডেটা যা সময়ের সাথে পরিবর্তিত হয়। Time Series বিশ্লেষণ এবং মডেলিংয়ে মূল লক্ষ্য হল ভবিষ্যদ্বাণী করা, যেমন স্টক মার্কেট প্রেডিকশন, সেলস ফরকাস্টিং, আবহাওয়া পূর্বাভাস ইত্যাদি। Gluon API ব্যবহার করে Time Series মডেল তৈরি করা সহজ এবং কার্যকরী হতে পারে। আমরা এখানে Gluon ব্যবহার করে একটি LSTM (Long Short Term Memory) মডেল তৈরি করব, যা Time Series ডেটা মডেলিংয়ের জন্য ব্যাপকভাবে ব্যবহৃত হয়।


ধাপ ১: প্রাথমিক সেটআপ

প্রথমে, প্রয়োজনীয় লাইব্রেরি ইনস্টল করে নিন:

pip install mxnet gluoncv pandas matplotlib

এছাড়া, যদি Time Series Data থাকে, যেমন স্টক মার্কেট ডেটা বা অন্যান্য সিস্টেম ডেটা, সেটি pandas দিয়ে লোড করতে হবে।


ধাপ ২: Time Series ডেটা লোড এবং প্রি-প্রসেসিং

এখানে আমরা একটি উদাহরণ হিসেবে stock market data ব্যবহার করব, যেটি pandas দিয়ে লোড করা হবে। আপনি কোনো সাধারণ Time Series ডেটা ব্যবহার করতে পারেন।

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler

# উদাহরণ হিসেবে stock price data লোড করুন (csv ফাইল থেকে)
data = pd.read_csv('stock_data.csv', date_parser=True, index_col='Date')

# শুধুমাত্র 'Close' কলামটি ব্যবহার করা
data = data[['Close']]

# ডেটাকে নরমালাইজ করা (MinMaxScaler ব্যবহার করে)
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(data)

# Data visualization
plt.figure(figsize=(10,6))
plt.plot(data)
plt.title('Stock Price Over Time')
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.show()
  • এখানে, stock_data.csv হল আপনার ডেটাসেটের ফাইল নাম।
  • MinMaxScaler ব্যবহার করে ডেটাকে স্কেল করা হয়েছে যাতে ডেটা 0 এবং 1 এর মধ্যে থাকে।

ধাপ ৩: ডেটা প্রস্তুতি (Training এবং Test Set তৈরি)

Time Series ডেটাতে লেবেল করার জন্য, আমরা sliding window কৌশল ব্যবহার করব। এই কৌশলে, কিছু অতীত পিরিয়ড (lag) ডেটার উপর ভিত্তি করে পরবর্তী পিরিয়ডের ভবিষ্যদ্বাণী করা হয়।

def create_dataset(data, time_step=60):
    X, y = [], []
    for i in range(len(data) - time_step - 1):
        X.append(data[i:(i + time_step), 0])
        y.append(data[i + time_step, 0])
    return np.array(X), np.array(y)

# ডেটাকে ট্রেনিং এবং টেস্ট সেটে ভাগ করা
train_size = int(len(scaled_data) * 0.8)
train_data, test_data = scaled_data[:train_size], scaled_data[train_size:]

# X_train, y_train, X_test, y_test তৈরি করা
time_step = 60
X_train, y_train = create_dataset(train_data, time_step)
X_test, y_test = create_dataset(test_data, time_step)

# X_train এবং X_test এর আকার ঠিক করা (LSTM এর জন্য 3D আউটপুট)
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)
  • create_dataset ফাংশনটি time_step এর সাহায্যে ডেটাকে X (ইনপুট) এবং y (আউটপুট) এ রূপান্তরিত করে।
  • X_train এবং X_test কে 3D আকারে রূপান্তরিত করা হয়েছে, যা LSTM মডেল গ্রহণ করতে সক্ষম।

ধাপ ৪: LSTM মডেল তৈরি করা

এখন আমরা LSTM (Long Short Term Memory) মডেল তৈরি করব, যা টাইম সিরিজ ডেটার জন্য একটি জনপ্রিয় মডেল। LSTM একটি পুনরাবৃত্ত নিউরাল নেটওয়ার্ক (RNN) আর্কিটেকচার যা সময়ভিত্তিক ডেটার উপর কাজ করতে সক্ষম।

from mxnet.gluon import nn
from mxnet import init
from mxnet.gluon import Trainer
from mxnet.gluon import loss as gloss

# LSTM মডেল তৈরি
class LSTMModel(nn.Block):
    def __init__(self, **kwargs):
        super(LSTMModel, self).__init__(**kwargs)
        self.lstm = nn.LSTM(50, input_size=1, layout='NTC')
        self.dense = nn.Dense(1)

    def forward(self, x):
        x = self.lstm(x)
        x = self.dense(x)
        return x

# মডেল ইনিশিয়ালাইজ করা
net = LSTMModel()
net.initialize(init.Xavier(), ctx=mx.cpu())

# প্রশিক্ষণ ও অপটিমাইজার সেটআপ
loss_fn = gloss.L2Loss()  # L2 loss function (Mean Squared Error)
trainer = Trainer(net.collect_params(), 'adam', {'learning_rate': 0.001})

# প্রশিক্ষণ ফাংশন
epochs = 10
for epoch in range(epochs):
    total_loss = 0
    for i in range(len(X_train)):
        data = nd.array(X_train[i], ctx=mx.cpu())
        label = nd.array([y_train[i]], ctx=mx.cpu())
        with autograd.record():
            output = net(data)
            loss = loss_fn(output, label)
        loss.backward()
        trainer.step(1)
        total_loss += loss.mean().asscalar()

    print(f'Epoch {epoch+1}/{epochs}, Loss: {total_loss/len(X_train)}')

ব্যাখ্যা:

  • LSTM Layer: এখানে 50 ইউনিটের LSTM লেয়ার ব্যবহার করা হয়েছে। আপনি প্রয়োজন অনুযায়ী ইউনিটের সংখ্যা পরিবর্তন করতে পারেন।
  • Dense Layer: LSTM আউটপুটের উপর একটি Dense layer যোগ করা হয়েছে, যার আউটপুট 1 (ফিউচার প্রেডিকশন)।
  • L2Loss: মডেলের প্রশিক্ষণের জন্য Mean Squared Error (MSE) ব্যবহার করা হচ্ছে।

ধাপ ৫: মডেল মূল্যায়ন

প্রশিক্ষণের পরে, মডেলটির পারফরম্যান্স পরীক্ষা করতে হবে।

# টেস্ট ডেটার উপর মূল্যায়ন
predictions = []
for i in range(len(X_test)):
    data = nd.array(X_test[i], ctx=mx.cpu())
    output = net(data)
    predictions.append(output.asscalar())

# ফলাফল ভিজ্যুয়ালাইজেশন
plt.plot(y_test, color='blue', label='Actual Prices')
plt.plot(predictions, color='red', label='Predicted Prices')
plt.title('Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Stock Price')
plt.legend()
plt.show()
  • predictions হল মডেল থেকে প্রাপ্ত ভবিষ্যদ্বাণী ফলাফল।
  • y_test হল আসল ডেটা।
  • আমরা আউটপুট এবং আসল ডেটা দুটি প্লট করেছি, যাতে মডেলের পারফরম্যান্স দেখা যায়।

সারাংশ

  • Time Series Prediction-এ Gluon API ব্যবহার করে LSTM Model তৈরি করা হলো।
  • আমরা stock market data ব্যবহার করে pre-processing, model creation, এবং training দেখিয়েছি।
  • মডেলটি পরে evaluation করা হলো এবং প্রেডিকশন ফলাফল ভিজ্যুয়ালাইজ করা হয়েছে।

এটি একটি সাধারণ উদাহরণ, আপনি এই কাঠামোকে বিভিন্ন ধরণের Time Series ডেটাসেটে প্রয়োগ করতে পারেন, যেমন আবহাওয়া, অর্থনৈতিক ডেটা, অথবা স্বাস্থ্য সংক্রান্ত ডেটা।

Content added By
Promotion

Are you sure to start over?

Loading...